﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ConfeccionesJR.Entites;
using ConfeccionesJR.Repository;
using Microsoft.Practices.Unity;

namespace ConfeccionesJR.BussinesLogic
{
    public class DetalleCompraBL:IDetalleCompraBL
    {
        [Dependency]
        public IDetalleCompraRepository detalleRepository { get; set; }

        [Dependency]
        public ICompraRepository compraRepository { get; set; }

        [Dependency]
        public IMaterialRepository materialRepository { get; set; }

        [Dependency]
        public IUnidadMedidaRepository unidadRepository { get; set; }


        public List<DETALLECOMPRA> GetAllFromDetalleCompraByCompraId(int id)
        {
            return detalleRepository.GetAllFromDetalleCompraByCompraId(id);
        }

        public List<DETALLECOMPRA> GetFromDetalleCompraByProductoAndCompraId(string descripcion, int id)
        {
            return detalleRepository.GetFromDetalleCompraByProductoAndCompraId(descripcion,id);
        }

        public DETALLECOMPRA GetDetalleCompraByMaterialIdAndCompraId(int idMaterial, int idcompra)
        {
            return detalleRepository.GetDetalleCompraByMaterialIdAndCompraId(idMaterial,idcompra);
        }


        public void RemoveDetalleCompraByMaterialIdAndCompraId(int idMater, int idCompra)
        {
            var compra = compraRepository.GetFromCompraById(idCompra);
            detalleRepository.RemoveDetalleCompraByMaterialIdAndCompraId(idMater, idCompra);
            
            foreach (var item in compra.DETALLECOMPRAs)
            {
                if (idMater == item.materialId)
                {
                    var material = materialRepository.GetFromMaterialById(item.MATERIAL.Id);
                    var und = unidadRepository.GetFromUnidadMedidaById(item.MATERIAL.unidadMedidaId);
                    
                    material.UNIDAD_MEDIDA = und;
                    material.Stock = material.Stock - item.Cantidad;
                    materialRepository.UpdateMaterial(material);
                }

                

            }

        }
    }
}
